home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib15.dsk / PRINT FORMATTER SAMPLE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  5KB  |  101 lines

  1. 10  REM  **********************
  2. 11  REM  * PRINT FORMATTER    *
  3. 12  REM  * BY R. SCOTT SMITH  *
  4. 13  REM  * COPYRIGHT (C) 1983 *
  5. 14  REM  * BY MICROSPARC, INC *
  6. 15  REM  * LINCOLN, MA. 01773 *
  7. 16  REM  **********************
  8. 20  REM  MC= MAXIMUM NO. OF COLUMNS OF PRINTER MODE
  9. 30  REM  NC= NO. OF COLUMNS TO BE  PRINTED
  10. 40  REM  SP= SPACE BETWEEN ENTRIES
  11. 50  REM  SP= 0 NORMAL PRINT
  12. 60  REM  SP= -1 APPENDS ENTRIES TOGETHER IN ONE PARAGRAPH
  13. 70  REM  SP= N PUTS N BLANK LINES BETWEEN ENTRIES
  14. 80  REM  RJ > 0 FOR RIGHT JUSTIFICATION
  15. 90  REM 
  16. 99  GOTO 1000: REM  START OF PROGRAM
  17. 100  REM  PRINT FORMATTER SUB-ROUTINE
  18. 110  IF NC = 0  THEN NC = 40:MC = 40
  19. 120  IF MC <NC  THEN MC = MC +40: GOTO 120
  20. 130 LM =  INT((MC -NC)/2) +1
  21. 140  IF  RIGHT$(A$,1) < >" "  THEN A$ = A$ +" "
  22. 150  IF  RIGHT$(A$,2) = ". "  OR  RIGHT$(A$,2) = "? "  OR  RIGHT$(A$,2) = "! "  THEN A$ = A$ +" "
  23. 160 X =  LEN(X$): IF  LEN(A$) >250 -X  THEN X$ = X$ + LEFT$(A$,250 -X): GOSUB 220:X$ = X$ + MID$ (A$,251 -X)
  24. 170  IF A$ = " "  THEN  GOSUB 400: GOTO 190
  25. 180 X$ = X$ +A$: GOTO 220
  26. 190 S1 = SP +1
  27. 200  IF S1 >0  THEN  GOSUB 400:S1 = S1 -1: GOTO 200
  28. 210  RETURN 
  29. 220  REM  FIND BLANK
  30. 230  IF  LEFT$(X$,1) = " "  AND  LEFT$(X$,3) < >" "  THEN X$ =  MID$ (X$,2): GOTO 230
  31. 240  IF  LEN(X$) <NC  THEN 190
  32. 250 Y$ = X$
  33. 260  FOR L1 = NC +1 TO 1  STEP  -1: IF  MID$ (Y$,L1,1) = " "  THEN 280
  34. 270  NEXT :L1 = NC +1
  35. 280 X$ =  LEFT$(Y$,L1 -1): GOSUB 300: IF L1 >0  THEN X$ =  MID$ (Y$,L1)
  36. 290  GOTO 230
  37. 300  REM  RIGHT JUSTIFY
  38. 310  IF   NOT RJ  THEN 400
  39. 320 RM = NC +1 -L1:J1 = L1
  40. 330  IF  RIGHT$(X$,1) = " "  THEN X$ =  LEFT$(X$, LEN(X$) -1):RM = RM +1:J1 = J1 -1: GOTO 330
  41. 340  IF RM <1  THEN 400
  42. 350  FOR J2 = 1 TO J1: IF  MID$ (X$,J2,1) < >" "  THEN 370
  43. 360  NEXT : GOTO 400
  44. 370  FOR J3 = J1 TO J2  STEP  -1: IF RM <1  THEN 400
  45. 380  IF  MID$ (X$,J3,1) = " "  THEN X$ =  LEFT$(X$,J3) + MID$ (X$,J3):RM = RM -1
  46. 390  NEXT : IF RM >0  THEN 370
  47. 400  REM  PRINT OUT
  48. 410  IF S1 -1 = SP  AND X$ = ""  THEN  RETURN 
  49. 420  HTAB LM: PRINT X$;
  50. 430  IF  LEN(X$) < >MC  THEN  PRINT 
  51. 440  REM  PUT "PRINT" HERE FOR DOUBLE SPACING
  52. 450 X$ = "": RETURN 
  53. 460  REM  END OF LISTING #1
  54. 999  REM  LISTING #2
  55. 1000  REM  ********************
  56. 1001  REM  *                  *
  57. 1002  REM  * TEXT FORMATTER   *
  58. 1003  REM  *                  *
  59. 1004  REM  * BY R.SCOTT SMITH *
  60. 1005  REM  *                  *
  61. 1006  REM  * SAMPLE PROGRAM   *
  62. 1007  REM  *                  *
  63. 1008  REM  ********************
  64. 1009  REM  CHANGE MC/NC/SP TO YOUR SPECIFICATIONS. DEFAULT=40/40/0
  65. 1010  HOME : PRINT : HTAB 13: PRINT "TEXT FORMATTER": VTAB 8: INPUT "ENTER YOUR NAME ";NA$: PRINT 
  66. 1020 A$(1) = NA$ +", THIS SAMPLE PROGRAM WILL PRINT THESE STATEMENTS IN VARIOUS FORMATS."
  67. 1030 A$(2) = "FIRST WILL BE NORMAL PRINT AND THEN A PRINT OUT WITH THE APPEND FUNCTION ON (SP=-1) AND RIGHT JUSTIFICATION."
  68. 1040 A$(3) = "NEXT THE PRINT OUT WILL BE REPEATED WITH NC SET TO 30."
  69. 1050 A$(4) = "AND FINALLY,"
  70. 1060 A$(5) = "A PRINT OUT WITH SP SET TO ONE (A SPACE BETWEEN ENTRIES)."
  71. 1070 A$(6) = ""
  72. 1080 D$ =  CHR$(4): GOSUB 1550: HOME : VTAB 3:NC = MC: PRINT D$;"PR#";PR
  73. 1090  PRINT "WITHOUT TEXT FORMATTER:": PRINT : FOR I = 1 TO 6: PRINT A$(I): NEXT : PRINT 
  74. 1100 A$ = "AND NOW WITH TEXT FORMATTER:": GOSUB 100: GOSUB 1530
  75. 1110  PRINT "NORMAL": PRINT :A = 1:N = 6: GOSUB 1500
  76. 1120  PRINT "APPEND FUNCTION SET/RIGHT JUSTIFIED": PRINT :SP =  -1:RJ = 1: GOSUB 1500
  77. 1130  HTAB 6: PRINT "30 COLUMN WIDTH": PRINT :NC = 30: GOSUB 1500
  78. 1140  HTAB 6: PRINT "SPACE BETWEEN ENTRIES": PRINT :SP = 1: GOSUB 1500
  79. 1150  VTAB 8:RJ = 0:SP =  -1:NC = 7:MC = 40:A$ = "MARY HAD A LITTLE LAMB. ITS FLEECE WAS WHITE AS SNOW.": GOSUB 100
  80. 1160  GOSUB 1530:SP = 0:NC = 40:A$ = "NOW IT IS YOUR TURN.  AFTER YOU ENTER SEVERAL ENTRIES, THE PROGRAM WILL COMBINE THEM INTO ONE PARAGRAPH.": GOSUB 100: PRINT 
  81. 1170  INPUT "HOW MANY ENTRIES? ";N
  82. 1180 N = N +6: FOR I = 7 TO N: PRINT "ENTRY #";I -6;" ";: INPUT A$(I): NEXT 
  83. 1190 N = N +1:A$(N) = " ":A = 7: GOSUB 1550:NC = MC: PRINT D$;"PR#";PR
  84. 1200  HOME : VTAB 3: PRINT "WITHOUT TEXT FORMATTER:": PRINT : FOR I = A TO N: PRINT A$(I): NEXT : PRINT 
  85. 1210  PRINT :A$ = "AND NOW WITH TEXT FORMATTER:": GOSUB 100: PRINT :SP =  -1: GOSUB 1530
  86. 1220 RJ = 0: PRINT "RIGHT JUSTIFICATION? ";: GET Q$: PRINT Q$: IF Q$ = "Y"  THEN RJ = 1
  87. 1230  PRINT : GOSUB 1550: GOSUB 1500
  88. 1240  PRINT : INPUT "ENTER NEW PRINT WIDTH (0 TO ABORT) ";NC: IF NC >0  THEN 1220
  89. 1250  HOME : VTAB 3: PRINT "AND NOW BOTH PARAGRAPHS INDENTED.": PRINT 
  90. 1260 A$(1) = "   " +A$(1):A$(7) = "   " +A$(7):A = 1:RJ = 1:NC = MC -5: GOSUB 1500
  91. 1270  END 
  92. 1500  REM  PRINT OUT
  93. 1510  IF PR  THEN  PRINT D$;"PR#1"
  94. 1515  IF PR  AND NC = MC  THEN NC = NC -1: REM  PRINTER QUIRK:MUST HAVE THE SCREEN TURNED OFF OR NC SET TO ONE LESS THAN MAXIMUM
  95. 1520  PRINT : FOR I = A TO N:A$ = A$(I): GOSUB 100: NEXT 
  96. 1530  IF PR  THEN  PRINT D$;"PR#0"
  97. 1540  PRINT : HTAB LM: PRINT "PRESS ANY KEY";: GET Q$: PRINT : HOME : VTAB 3: RETURN 
  98. 1550  REM  CRT/PRINTER/SUB
  99. 1560  PRINT "PRINT MODE? (";: FLASH : PRINT "C";: NORMAL : PRINT "RT/";: FLASH : PRINT "P";: NORMAL : PRINT "RINTER) ";
  100. 1570  GET Q$: PRINT Q$:PR = 0:MC = 40: IF Q$ = "P"  THEN PR = 1:MC = 80
  101. 1580  RETURN